//创建线程的5种方式
/*
1.继承Thread类
2.实现Runnable接口
3.使用匿名内部类创建Thread子类对象
4.使用匿名内部类创建Runnable子类对象
5.使用Lambda表达式创建Runnable子类对象
 */

//方法一：继承Thread类
//1.1 继承Thread来创建一个线程类
class MyThread1 extends Thread {
    @Override
    public void run() {
        System.out.println("Hello from MyThread");
    }
}

//方法二：实现Runnable接口
//1.1 实现Runnable接口
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Hello from MyRunnable");
    }
}
public class Test_1_3 {
    public static void main(String[] args) {
        //1.2创建MyThread1类的实例
        MyThread1 t1 = new MyThread1();
        //1.3启动线程
        t1.start();

        //2.2 创建Tread类实例，调用T和read的构造方法，传入MyRunnable类的实例
        Thread t2 = new Thread(new MyRunnable());
        //2.3 启动线程
        t2.start();

        //方法三：使用匿名内部类创建Thread子类对象
        //3.1 创建Thread子类对象，重写run方法
        Thread t3 = new Thread() {
            @Override
            public void run() {
                System.out.println("使用匿名类创建 Thread 子类对象");
            }
        };
        //3.2 启动线程
        t3.start();

        //方法四：使用匿名内部类创建Runnable子类对象
        //4.1 使用匿名内部类创建Runnable子类对象，重写run方法
        Thread t4 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("使用匿名类创建 Runnable 子类对象");
            }
        });
        //4.2 启动线程
        t4.start();

        //方法五：使用Lambda表达式创建Thread子类对象
        //5.1 使用Lambda 表达式创建 Runnable 子类对象
        Thread t5 = new Thread(() -> {
            System.out.println("使用Lambda表达式创建 Thread 子类对象");
        });
        //5.2 启动线程
        t5.start();

    }
}
